package com.bsd.payment.server.util;

import java.net.*;
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.List;

/**
 * @author dingzhiwei jmdhappy@126.com
 * @version V1.0
 * @Description: IP地址工具类
 * @date 2017-07-05
 * @Copyright: www.xxpay.org
 */
public class IPUtility {
    /**
     * getLocalhostIp(获取本机ip地址)
     *
     * @throws UnknownHostException
     * @Exception 异常对象
     * @since CodingExample　Ver(编码范例查看) 1.1
     */
    public static String getLocalhostIp() {
        String ip = "";
        try {
            ip = InetAddress.getLocalHost().getHostAddress();
        } catch (Exception e) {
            return null;
        }
        return ip;
    }

    public static List<String> getIpAddress() throws Exception {
        List<String> IPs = new ArrayList<String>();
        Enumeration<NetworkInterface> allNetInterfaces = null;
        allNetInterfaces = NetworkInterface.getNetworkInterfaces();
        InetAddress ip = null;
        while (allNetInterfaces.hasMoreElements()) {
            NetworkInterface netInterface = (NetworkInterface) allNetInterfaces.nextElement();
            Enumeration<?> addresses = netInterface.getInetAddresses();
            while (addresses.hasMoreElements()) {
                ip = (InetAddress) addresses.nextElement();
                if (ip != null && ip instanceof Inet4Address && ip.getHostAddress().indexOf(".") != -1) {
                    IPs.add(ip.getHostAddress());
                }
            }
        }
        return IPs;
    }

    /**
     * 兼容Linux系统
     *
     * @return
     */
    public static String getLocalIP() {
        String ip = "";
        try {
            Enumeration<?> e1 = (Enumeration<?>) NetworkInterface
                    .getNetworkInterfaces();
            while (e1.hasMoreElements()) {
                NetworkInterface ni = (NetworkInterface) e1.nextElement();
                Enumeration<?> e2 = ni.getInetAddresses();
                while (e2.hasMoreElements()) {
                    InetAddress ia = (InetAddress) e2.nextElement();
                    if (ia instanceof Inet6Address) {
                        continue;
                    }
                    if (!ia.isLoopbackAddress()) {
                        ip = ia.getHostAddress();
                        break;
                    }
                }
            }
        } catch (SocketException e) {
            e.printStackTrace();
            return "";
        }
        return ip;
    }

    public static void main(String[] args) {
        System.out.println(IPUtility.getLocalIP());
    }
}
